#include "my_gui.h"
#include "lvgl.h"
#include "sys.h"
#include "gui.h"
#include "lcd.h"
#include "gui_test.h"

LV_FONT_DECLARE(syFONT30);

extern u8 flag;
extern float Freq,Vpp,Max,Duty;
extern float div_auto;
float save_Freq,save_Vpp,save_Max,save_Duty;

lv_point_t sin_line_points[NPT],save_points[NPT];              /* 正弦波坐标数组 */
lv_obj_t *sin_line;                           /* 创建线条 */
lv_obj_t *lable_maxvalue,*lable_vppvalue,*lable_btn,*lable_freqvalue,*lable_dutyvalue;                           /* 创建标签 */
lv_obj_t *btn_stop,*btn_save,*btn_show,*btn_auto;
u8 active_falg=1;

static void event_osc(lv_event_t * e)
{
    char str[40];
    lv_obj_t *target = lv_event_get_target(e);/*接收部件类型*/
    if(target==btn_stop)
    {
        active_falg=!active_falg; /*转态翻转*/
    }
	else if(target==btn_save)
    {
        for(int i=0;i<NPT;i++)
        {
            save_points[i]=sin_line_points[i];
        }
        save_Freq=Freq;
        save_Vpp=Vpp;
        save_Max=Max;
        save_Duty=Duty;
    }
	else if(target==btn_show)
    {
        active_falg=0;      /*暂停状态*/
        lv_line_set_points(sin_line, save_points, NPT);                                     /* 设置线条坐标点 */
        sprintf(str,"%.2fV",save_Max);
        lv_label_set_text(lable_maxvalue,(char*)str);/* 设置标签文本，加printf格式*/
        sprintf(str,"%.1f%%",save_Duty);
        lv_label_set_text(lable_dutyvalue,(char*)str);/* 设置标签文本，加printf格式*/
        sprintf(str,"%.2fV",save_Vpp);
        lv_label_set_text(lable_vppvalue,(char*)str);/* 设置标签文本，加printf格式*/
        sprintf(str,"%dHz",(int)save_Freq);
        lv_label_set_text(lable_freqvalue,(char*)str);/* 设置标签文本，加printf格式*/
    }
    else if(target==btn_auto)
    {
        active_falg=1;      /*显示状态*/
        if(Freq<=500)
        {
            div_auto=0.2;
        }
        else if(Freq<=3000&&Freq>=500)
        {
            div_auto=0.5;
        }
        else if(Freq>=20000)
        {
            div_auto=4;
        }
        else if(Freq>=30000)
        {
            div_auto=5;
        }
        else if(Freq>=50000)
        {
            div_auto=8;
        }
        else
        {
            div_auto=2.0;
        }
        
    }
    
    switch(active_falg)
    {
        /*暂停状态*/
        case 0:
        {
            flag=0;
            TIM_Cmd(TIM1,DISABLE);
            lv_label_set_text(lable_btn, "stp...");
            lv_obj_add_state(btn_stop,LV_STATE_CHECKED);
        }break;
        /*显示状态*/
        case 1:
        {
            TIM_Cmd(TIM1,ENABLE);
            lv_label_set_text(lable_btn, "ing...");
            lv_obj_clear_state(btn_stop,LV_STATE_CHECKED);
        }break;
    }

}

void my_gui(void)
{
    //左窗口
    lv_obj_t *obj_left=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_left,lv_obj_get_width(lv_scr_act())*0.8,lv_obj_get_height(lv_scr_act())*0.8); /*设置大小*/
    lv_obj_align(obj_left,LV_ALIGN_BOTTOM_LEFT,0,0);/*设置对齐方式，x、y偏移量*/
    lv_obj_set_style_bg_color(obj_left,lv_color_hex(0x000000),LV_PART_MAIN);/*局部样式，只对当前部件有效*/
    lv_obj_remove_style(obj_left,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_left);/*更新物体参数*/

    
    //上窗口
    lv_obj_t *obj_top=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_top,lv_obj_get_width(lv_scr_act())*0.8,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_top,LV_ALIGN_TOP_LEFT,0,0);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_top,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_top);/*更新物体参数*/
    
    //标题标签
    lv_obj_t *lable_title=lv_label_create(obj_top);/*创建文本部件*/
    lv_obj_align(lable_title,LV_ALIGN_LEFT_MID,0,0);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_title, &syFONT30, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_title,lv_color_hex(0x0000ff),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_title, "示波器:");/*设置标签文本*/
    
    
    
    
    //波形存储按钮
    btn_save = lv_btn_create(lv_scr_act());/*创建按钮部件*/
    lv_obj_set_size(btn_save,80,lv_obj_get_height(obj_top)*0.8);/*设置大小*/
    lv_obj_align_to(btn_save,obj_top,LV_ALIGN_CENTER,-20,0);/* 设置以某个部件对齐方式，x、y偏移量 */
    lv_obj_set_style_bg_color(btn_save,lv_color_hex(0x000080),LV_EVENT_PRESSED);/*局部样式，只对当前部件有效*/
    lv_obj_add_event_cb(btn_save,event_osc,LV_EVENT_CLICKED,NULL);/*添加事件*/
	//存储标签
    lv_obj_t *lable_save = lv_label_create(btn_save);/* 创建停止按钮标签 */
    lv_obj_set_style_text_font(lable_save, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_label_set_text(lable_save, "SAVE");/* 设置标签文本 */
    lv_obj_set_align(lable_save,LV_ALIGN_CENTER);/* 设置标签位置 */
	
    //波形显示按钮
    btn_show = lv_btn_create(lv_scr_act());/*创建按钮部件*/
    lv_obj_set_size(btn_show,80,lv_obj_get_height(obj_top)*0.8);/*设置大小*/
    lv_obj_align_to(btn_show,obj_top,LV_ALIGN_CENTER,70-5,0);/* 设置以某个部件对齐方式，x、y偏移量 */
    lv_obj_set_style_bg_color(btn_show,lv_color_hex(0x000080),LV_EVENT_PRESSED);/*局部样式，只对当前部件有效*/
    lv_obj_add_event_cb(btn_show,event_osc,LV_EVENT_CLICKED,NULL);/*添加事件*/
	//显示标签
    lv_obj_t *lable_show = lv_label_create(btn_show);/* 创建停止按钮标签 */
    lv_obj_set_style_text_font(lable_show, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_label_set_text(lable_show, "SHOW");/* 设置标签文本 */
    lv_obj_set_align(lable_show,LV_ALIGN_CENTER);/* 设置标签位置 */
    
    //波形刷新按钮
    btn_auto = lv_btn_create(lv_scr_act());/*创建按钮部件*/
    lv_obj_set_size(btn_auto,80,lv_obj_get_height(obj_top)*0.8);/*设置大小*/
    lv_obj_align_to(btn_auto,obj_top,LV_ALIGN_CENTER,150,0);/* 设置以某个部件对齐方式，x、y偏移量 */
    lv_obj_set_style_bg_color(btn_auto,lv_color_hex(0x000080),LV_EVENT_PRESSED);/*局部样式，只对当前部件有效*/
    lv_obj_add_event_cb(btn_auto,event_osc,LV_EVENT_CLICKED,NULL);/*添加事件*/
	//刷新标签
    lv_obj_t *lable_auto = lv_label_create(btn_auto);/* 创建停止按钮标签 */
    lv_obj_set_style_text_font(lable_auto, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_label_set_text(lable_auto, "AUTO");/* 设置标签文本 */
    lv_obj_set_align(lable_auto,LV_ALIGN_CENTER);/* 设置标签位置 */
    
    //Vmax窗口
    lv_obj_t *obj_max=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_max,lv_obj_get_width(lv_scr_act())*0.2,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_max,LV_ALIGN_TOP_RIGHT,0,0);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_max,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_max);/*更新物体参数*/
    //Vmax标签
    lv_obj_t *lable_max=lv_label_create(obj_max);/*创建文本部件*/
    lv_obj_align(lable_max,LV_ALIGN_TOP_MID,0,-5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_max, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_max,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_max, "Vmax:");/*设置标签文本*/
    //Vmax值标签
    lable_maxvalue=lv_label_create(obj_max);/*创建文本部件*/
    lv_obj_align(lable_maxvalue,LV_ALIGN_BOTTOM_MID,0,5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_maxvalue, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_maxvalue,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_maxvalue, "");/*设置标签文本*/
    
    //Vpp窗口
    lv_obj_t *obj_vpp=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_vpp,lv_obj_get_width(lv_scr_act())*0.2,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_vpp,LV_ALIGN_TOP_RIGHT,0,lv_obj_get_height(lv_scr_act())*0.2);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_vpp,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_vpp);/*更新物体参数*/
    //Vpp标签
    lv_obj_t *lable_vpp=lv_label_create(obj_vpp);/*创建文本部件*/
    lv_obj_align(lable_vpp,LV_ALIGN_TOP_MID,0,-5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_vpp, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_vpp,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_vpp, "Vpp:");/*设置标签文本*/
    //Vpp值标签
    lable_vppvalue=lv_label_create(obj_vpp);/*创建文本部件*/
    lv_obj_align(lable_vppvalue,LV_ALIGN_BOTTOM_MID,0,5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_vppvalue, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_vppvalue,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_vppvalue, "");/*设置标签文本*/
    
    //波形暂停按钮窗口
    lv_obj_t *obj_btnstop=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_btnstop,lv_obj_get_width(lv_scr_act())*0.16,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_btnstop,LV_ALIGN_TOP_RIGHT,-lv_obj_get_width(lv_scr_act())*0.02,lv_obj_get_height(lv_scr_act())*0.4);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_btnstop,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_btnstop);/*更新物体参数*/
    //波形暂停按钮
    btn_stop = lv_btn_create(lv_scr_act());/*创建按钮部件*/
    lv_obj_set_size(btn_stop,lv_obj_get_width(obj_btnstop),lv_obj_get_height(obj_btnstop));/*设置大小*/
    lv_obj_align_to(btn_stop,obj_btnstop,LV_ALIGN_CENTER,0,0);/* 设置以某个部件对齐方式，x、y偏移量 */
    lv_obj_add_flag(btn_stop,LV_OBJ_FLAG_CHECKABLE);/* 开启状态切换 */
    lv_obj_add_event_cb(btn_stop,event_osc,LV_EVENT_VALUE_CHANGED,NULL);/*添加事件*/
    //停止标签
    lable_btn = lv_label_create(btn_stop);/* 创建停止按钮标签 */
    lv_obj_set_style_text_font(lable_btn, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_label_set_text(lable_btn, "ing...");/* 设置标签文本 */
    lv_obj_set_align(lable_btn,LV_ALIGN_CENTER);/* 设置标签位置 */

    //Freq窗口
    lv_obj_t *obj_freq=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_freq,lv_obj_get_width(lv_scr_act())*0.2,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_freq,LV_ALIGN_TOP_RIGHT,0,lv_obj_get_height(lv_scr_act())*0.6);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_freq,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_freq);/*更新物体参数*/
    //Freq标签
    lv_obj_t *lable_freq=lv_label_create(obj_freq);/*创建文本部件*/
    lv_obj_align(lable_freq,LV_ALIGN_TOP_MID,0,-5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_freq, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_freq,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_freq, "Freq:");/*设置标签文本*/
    //Freq值标签
    lable_freqvalue=lv_label_create(obj_freq);/*创建文本部件*/
    lv_obj_align(lable_freqvalue,LV_ALIGN_BOTTOM_MID,0,5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_freqvalue, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_freqvalue,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_freqvalue, "");/*设置标签文本*/
    
    //Duty窗口
    lv_obj_t *obj_duty=lv_obj_create(lv_scr_act());/*创建窗口部件*/
    lv_obj_set_size(obj_duty,lv_obj_get_width(lv_scr_act())*0.2,lv_obj_get_height(lv_scr_act())*0.2); /*设置大小*/
    lv_obj_align(obj_duty,LV_ALIGN_TOP_RIGHT,0,lv_obj_get_height(lv_scr_act())*0.8);/*设置对齐方式，x、y偏移量*/
    lv_obj_remove_style(obj_duty,NULL,LV_PART_SCROLLBAR);/*移除滚动条*/
    lv_obj_update_layout(obj_duty);/*更新物体参数*/
    //Duty标签
    lv_obj_t *lable_duty=lv_label_create(obj_duty);/*创建文本部件*/
    lv_obj_align(lable_duty,LV_ALIGN_TOP_MID,0,-5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_duty, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_duty,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_duty, "Duty:");/*设置标签文本*/
    //Duty值标签
    lable_dutyvalue=lv_label_create(obj_duty);/*创建文本部件*/
    lv_obj_align(lable_dutyvalue,LV_ALIGN_BOTTOM_MID,0,5);/* 设置对齐方式，x、y偏移量 */
    lv_obj_set_style_text_font(lable_dutyvalue, &lv_font_montserrat_16, LV_PART_MAIN);/* 设置字体 */
    lv_obj_set_style_text_color(lable_dutyvalue,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*局部样式，只对当前部件有效*/
    lv_label_set_text(lable_dutyvalue, "");/*设置标签文本*/
  
    
   /* 正弦波 */
    sin_line = lv_line_create(obj_left);                                      /* 创建线条 */
    lv_obj_center(sin_line);                                                                /* 设置位置 */
    lv_obj_set_style_line_width(sin_line, 3, LV_PART_MAIN);                                 /* 设置线的宽度 */
    lv_obj_set_style_line_color(sin_line, lv_palette_main(LV_PALETTE_YELLOW), LV_PART_MAIN);  /* 设置线的颜色 */
    lv_obj_set_style_line_rounded(sin_line, true, LV_PART_MAIN);                            /* 设置线条圆角 */
}

